﻿using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interactivity;

namespace Mandarine.Behavior
{
    /// <summary>
    /// TextChangedイベントでTextプロパティのBindingを更新するビヘイビアを提供します
    /// 
    /// </summary>
    public class UpdateSourceOnTextChangedBehavior : Behavior<TextBox>
    {
        private readonly TextChangedEventHandler _textChangedEventHandler = 
            (s, e) =>
            {
                var t = s as TextBox;
                // イベントハンドラ内でSourceの更新を行う 
                var binding = t.GetBindingExpression(TextBox.TextProperty);
                if (binding != null)
                {
                    binding.UpdateSource();
                }
            };

        protected override void OnAttached()
        {
            // 接続のタイミングでイベントを登録
            base.OnAttached();
            AssociatedObject.TextChanged += _textChangedEventHandler;
        }
        protected override void OnDetaching()
        {
            // 切り離されるタイミングでイベントの登録解除 
            AssociatedObject.TextChanged -= _textChangedEventHandler;
            base.OnDetaching();
        } 
    }
}
